package br.com.leopard.erp.gym.inicializacao;

import br.com.leopard.erp.gym.mapeamento.base_sistema.Acao;
import br.com.leopard.erp.gym.mapeamento.base_sistema.Modulo;
import br.com.leopard.erp.gym.mapeamento.base_sistema.Parametro;
import br.com.leopard.erp.gym.mapeamento.base_sistema.Perfil;
import br.com.leopard.erp.gym.mapeamento.base_sistema.Usuario;
import br.com.leopard.erp.gym.mapeamento.cad.Estado;
import br.com.leopard.erp.gym.mapeamento.cad.Municipio;
import br.com.leopard.erp.gym.mapeamento.cad.PessoaFisica;
import br.com.leopard.erp.gym.mapeamento.cad.TipoContato;
import br.com.leopard.erp.gym.mapeamento.cad.TipoDocumento;
import br.com.leopard.erp.gym.mapeamento.empresa.Empresa;

public enum ScriptsSQL {

	MODULO("SQL_MODULOS.sql", 1, Modulo.class),

	ACAO_MODULOS("SQL_ACAO_MODULO.sql", 2, Acao.class),

	ESTADO("SQL_ESTADOS.sql", 3, Estado.class),

	MUNICIPIO("SQL_MUNICIPIOS.sql", 4, Municipio.class),

	PERFIL("SQL_PERFIL.sql", 5, Perfil.class),

	PARAMETROS("SQL_PARAMETRO.sql", 6, Parametro.class),

	TIPO_CONTATO("SQL_TIPO_CONTATO.sql", 7, TipoContato.class),

	TIPO_DOCUMENTO("SQL_TIPO_DOCUMENTO.sql", 8, TipoDocumento.class),

	PESSOA("SQL_PESSOA.sql", 9, PessoaFisica.class),

	EMPRESA("SQL_EMPRESA.sql", 10, Empresa.class),

	USUARIO("SQL_USUARIO.sql", 11, Usuario.class);

	private String sql;

	private int ordem;

	private Class<?> classePersistente;

	private ScriptsSQL(String sql, int ordem, Class<?> classePersistente) {
		this.sql = sql;
		this.ordem = ordem;
		this.classePersistente = classePersistente;
	}

	public String getSql() {
		return sql;
	}

	public int getOrdem() {
		return ordem;
	}

	public Class<?> getClassePersistente() {
		return classePersistente;
	}

	public static ScriptsSQL getScriptSQLPelaOrdem(int ordem) {
		ScriptsSQL[] scripts = ScriptsSQL.values();

		for (int i = 0; i < scripts.length; i++) {
			if (scripts[i].getOrdem() == ordem) {
				return scripts[i];
			}
		}

		throw new IllegalArgumentException("Nenhum script encontrado com essa ordem " + ordem);
	}

	public static int getQuantidadeScripts() {
		return ScriptsSQL.values().length;
	}

}
